import torch
from torch import nn

"""
encoder_layer (TransformerEncoderLayer) –TransformerEncoderLayer（） 类的实例（必需）encoderblock。
num_layers (int) –encoderblock的数量 （必填）。
norm (Optional[Module]） – LayerNorm归一化组件（可选）。
enable_nested_tensor (bool) – 如果为 True，内置nn.Embedding进行词嵌入处理 默认为True
"""

# nn.Embedding + PositionEncoding
# TransformerEncoderLayer: EncoderBlock  embedding_dims=hidden_dims=512
encoder_layer = nn.TransformerEncoderLayer(d_model=512, nhead=8)
# TransformerEncoder: EncoderBlock * num_layers
transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=6)
src = torch.rand(10, 32, 512)
"""
src (Tensor) –编码器的序列 （必需）。
mask (Optional[Tensor]) – 单个句子掩码（可选）.
src_key_padding_mask (Optional[Tensor]) – 一个批次数据中因果掩码（可选）。
is_causal (Optional[bool]) –如果指定，则应用因果掩码作为 。
     Default：;尝试检测因果掩码。 Warning： 提供了一个提示，即 因果掩码。
     提供不正确的提示可能会导致 不正确的执行，包括向前和向后 兼容性。maskNoneis_causalmask
"""
out = transformer_encoder(src)
